package com.example.atv;

import androidx.activity.result.ActivityResult;
import androidx.activity.result.ActivityResultCallback;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.appcompat.app.AppCompatActivity;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.MultiAutoCompleteTextView;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * Activity 的生命周期
 *
 * 生么是生命周期？
 *
 * 由生到死，状态转换的全过程。
 * 从创建到销毁的整个过程。
 *
 * 为什么要学生命周期？
 * 在activity的不同的阶段做相应的事情。到了什么时间就做什么事。
 * 在特定的时间，做特定的事。
 *
 * 不同的阶段有哪些？
 * 就是一些回调方法。
 *
 * 1,创建，打开，显示获取焦点：oncreate、onstart、onresume
 * 2,关闭：onpause、onstop
 * 3,再打开获取焦点：onstart、onresume
 * 4,跳转到另一个页面：onpause、onstop
 * 5,跳转回来：onstart、onresume
 *
 */
public class MainActivity extends BaseActivity implements View.OnClickListener {

    public static final String TAG = "MainActivity";

    Button button;
    Button button2;

    Button button3;

    Button button4,backDataBtn;

    EditText mulEdit;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Log.d(TAG, "onCreate: ");
        
        button = findViewById(R.id.btn1);
        button2 = findViewById(R.id.btn2);
        mulEdit = findViewById(R.id.mulEdit);
        button3 = findViewById(R.id.atv1_btn3);
        button4 = findViewById(R.id.atv1_btn4);
        backDataBtn = findViewById(R.id.matv_backdata);

        button.setOnClickListener(this);
        button2.setOnClickListener(this);
        button3.setOnClickListener(this);
        button4.setOnClickListener(this);
        backDataBtn.setOnClickListener(this);
    }

    @Override
    protected void onPostResume() {
        super.onPostResume();
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.d(TAG, "onStart: ");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.d(TAG, "onStop: ");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d(TAG, "onDestroy: ");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.d(TAG, "onPause: ");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.d(TAG, "onResume: ");
    }

    private final ActivityResultLauncher<Intent> startActivityForResult = registerForActivityResult(
            new ActivityResultContracts.StartActivityForResult(),
            new ActivityResultCallback<ActivityResult>() {
                @Override
                public void onActivityResult(ActivityResult result) {
                    if (result.getResultCode() == Activity.RESULT_OK) {
                        // 处理从启动的Activity返回的结果
                        Intent data = result.getData();
                        if (data != null) {
                            // 从Intent中获取返回的数据
                            String returnedData = data.getStringExtra("result_key");
                            // 使用返回的数据
                            mulEdit.append(returnedData+"\r\n");
                        }
                    }
                }
            }
    );

    @Override
    public void onClick(View v) {
        int id = v.getId();
        switch (id){
            case R.id.btn1:
                Intent intent = new Intent(MainActivity.this,MainActivity2.class);
                startActivity(intent);
                break;
            case R.id.btn2:
                mulEdit.clearComposingText();
                Map<String, AppCompatActivity> atvMap = getAtvMap();
                if(atvMap != null && atvMap.size()>0){
                    for (Map.Entry<String, AppCompatActivity> entry : atvMap.entrySet()) {
                        mulEdit.append(entry.getValue().toString()+"\r\n");
                    }
                }
                break;
            case R.id.atv1_btn3:
                for (Map.Entry<String, AppCompatActivity> entry : getAtvMap().entrySet()) {
                    entry.getValue().finishAffinity();
                }
                break;
            case R.id.atv1_btn4:
                // 打开另一个界面，并接收返回结果
                intent = new Intent(MainActivity.this,MainActivity2.class);
                intent.putExtra("name", "张三"); // 使用键值对方式传递数据
//                startActivityForResult(intent, 119); // 请求码用于标识请求
                startActivityForResult.launch(intent);
                break;
            case R.id.matv_backdata:
                // 打开另一个界面，并接收返回结果
                intent = new Intent(MainActivity.this,MainActivity2.class);
                intent.putExtra("name", "张三"); // 使用键值对方式传递数据
                startActivityForResult(intent, 120); // 请求码用于标识请求
                break;
            default:
                break;
        }
    }


    /**
     * 接收从其他activity返回的数据
     * @param requestCode
     * @param resultCode
     * @param data
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 120) { // 确认请求码与启动时一致
            // 从另一个activity返回数据，会有一个返回码
            if (resultCode == RESULT_OK) {
                String resultData = data.getStringExtra("result_key"); // 使用相同的键获取返回数据
                // 处理resultData
                mulEdit.append(resultData+"\r\n");
            } else if (resultCode == RESULT_CANCELED) {
                // 用户取消或者发生错误的情况处理
//                String resultData = data.getStringExtra("result_key"); // 使用相同的键获取返回数据
                // 处理resultData
//                mulEdit.append(resultData+"\r\n");
            }
        }
    }
}